<template>
  <div>Goods</div>
</template>

<script>
// import store from "vuex";  // 不能这么写
import store from "@/store"; // 两种写法的区别？
export default {
  // 要进入组件，还没渲染组件时被调用
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不！能！获取组件实例 `this`，this.data里的数据，拿不到
    // 因为当守卫执行前，组件实例还没被创建
    console.log(to, from); // 路由对象
    let token = localStorage.getItem("x-auth-token");
    console.log("/free组件内守卫的：", token);
    if (!token) {
      // alert("请先登录")
      store.dispatch("showToast/asyncShowToast", {
        isShow: true,
        msg: "请先登录!",
        type: "warning",
      });
      // 触发 mutations 方法，弹出登录框
      store.commit("showLoginModel/changeIsShowLoginModel", true);
      return;
    }
    next();
  },
  // 路由参数更新时被调用
  /* beforeRouteUpdate(to, from, next) {
    // 在当前路由改变，但是该组件被复用时调用
    // 举例来说，对于一个带有动态参数的路径 /foo/:id，在 /foo/1 和 /foo/2 之间跳转的时候，
    // 由于会渲染同样的 Foo 组件，因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
    console.log("beforeRouteUpdate路由参数更新时被调用", to.query, from.query);
    next();
  }, */
  /* beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
    console.log("beforeRouteLeave离开组件，组件被销毁时被调用", to, from);
    next();
  }, */
};
</script>

<style>
</style>